<!doctype html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport"
        content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>Document</title>
  <script src="utils.js"></script>
</head>
<body>
<script>

  let obj = {
    x: 1,
    y: 2,
    fn: () => {
      this.x = 'x'
      this.y = 'y'
    }
  }
  var f = obj.fn
  f()
  console.log(obj)
  // obj.fn()
  // console.log(obj)

  // setTimeout(() => {
  //   console.log(1)
  //   Promise.resolve().then(() => {
  //     console.log(2)
  //   })
  // }, 0)
  //
  // Promise.resolve().then(() => {
  //   console.log(3)
  //   setTimeout(() => {
  //     console.log(4)
  //   }, 0)
  // })

  // async function foo() {
  //   console.log('foo')
  // }
  // async function bar() {
  //   console.log('bar start')
  //   await foo()
  //   console.log('bar end')
  // }
  // console.log('script start')
  // setTimeout(function () {
  //   console.log('setTimeout')
  // }, 0)
  // bar();
  // new Promise(function (resolve) {
  //   console.log('promise executor')
  //   resolve();
  // }).then(function () {
  //   console.log('promise then')
  // })
  // console.log('script end')

  // function request(obj) {
  //   return obj
  // }
  //
  // async function foo(x) {
  //   console.log(1)
  //   let a  = await request(x)
  //   console.log(a)
  //   let b = await  request(x * 2)
  //   console.log(b)
  // }
  // console.log('start')
  // foo(100)
  // console.log('end')
  // foo(101)

  // const time = Date.now()
  // requestAnimationFrame(() => {
  //   Log(time, 'raf')
  // })
  // new Promise(resolve => resolve()).then(() => Log(time, 'promise'))
  // ajax(() => {
  //   Log(time, 'ajax')
  // })
  //
  // function * generator() {
  //   Log(time, 'g-1')
  //   yield
  //   Log(time, 'g-2')
  // }
  //
  // const clock = (function *() {
  //   while (true) {
  //     let flag = Math.random() > 0.5
  //     console.log(flag)
  //     if(flag) {
  //       yield console.log('Tick!............................')
  //     } else {
  //       yield console.log('unTick!>>>>>>>>>>>>>>>>>>>>>>>>>')
  //     }
  //   }
  // })()
  //
  // const ggg =generator()
  // ggg.next()
  // Log(time, 'script-1')
  // ggg.next()
  // Log(time, 'script-2')
  // ggg.next()
  // Log(time, 'script-3')
  // ggg.next()
  //
  // clock.next()
  // console.log(1231)
  // console.log(1231)
  // console.log(1231)
  // console.log(1231)
  // clock.next()
  // clock.next()
  // clock.next()
  // clock.next()

  // async function f() {
  //   console.log(1)
  // }
  // console.log(112)
  // console.log(f())
  // console.log(222)

  // function Bromise(executor) {
  //   var onResolve_ = null
  //   var onReject_ = null
  //   //模拟实现resolve和then，暂不支持rejcet
  //   this.then = function (onResolve, onReject) {
  //     console.log(onResolve)
  //     onResolve_ = onResolve
  //   };
  //   function resolve(value) {
  //     setTimeout(()=>{
  //     onResolve_(value)
  //     },0)
  //   }
  //   executor(resolve, null);
  // }
  //
  // // function executor(resolve, reject) {
  // //   resolve(100)
  // // }
  // //将Promise改成我们自己的Bromsie
  // let demo = new Bromise(resolve => {
  //   resolve(200)
  // })
  //
  // // function onResolve(value){
  // //   console.log(value)
  // // }
  // demo.then(res => {
  //   console.log(res)
  // })
  // async function foo() {
  //   console.log('foo')
  // }
  // async function bar() {
  //   console.log('bar start')
  //   await foo()
  //   console.log('bar end')
  // }
  // console.log('script start')
  // setTimeout(function () {
  //   console.log('setTimeout')
  // }, 0)
  // bar();
  // new Promise(function (resolve) {
  //   console.log('promise executor')
  //   resolve();
  // }).then(function () {
  //   console.log('promise then')
  // })
  // console.log('script end')
  // //foo函数
  // function* foo() {
  //   let response1 = yield fetch('/')
  //   console.log('response1')
  //   console.log(response1)
  //   let response2 = yield fetch('/')
  //   console.log('response2')
  //   console.log(response2)
  // }
  //
  // //执行foo函数的代码
  // let gen = foo()
  // function getGenPromise(gen) {
  //   return gen.next().value
  // }
  // getGenPromise(gen).then((response) => {
  //   console.log('response1-co')
  //   console.log(response)
  //   return getGenPromise(gen)
  // }).then((response) => {
  //   console.log('response2-co')
  //   console.log(response)
  // })

  // function *foo() {
  //   let res = yield fetch('/')
  //   console.log(res, 'foo')
  // }
  //
  // let gen = foo()
  // function co(gen) {
  //   return gen.next().value
  // }
  // co(gen).then(res => {
  //   console.log(res, 'co')
  //   return co(gen)
  // }).then(res => {
  //   console.log(res, 'co2')
  // })

  // function f() {
  //   return 6
  // }
  // function * foo() {
  //   console.log('5')
  //   let res = yield fetch('/')
  //   console.log(res, 'foo')
  // }
  // // console.log(foo().next().value.then(res => console.log(res)))
  // // console.log(foo().next().value())\
  // let ff = foo()
  // console.log('start')
  // // console.log(ff.next())
  // ff.next().value.then()
  // console.log('end')
  // console.log(ff.next().value)
  // // async function foo2() {
  //   console.log(1)
  //   let a = await 100
  //   console.log(a)
  //   let b = await 200
  //   console.log(b)
  //   console.log(2)
  //   return 6
  // }
  // console.log(0)
  // console.log(foo2().then(res => console.log(res)))
  // // console.log()
  // console.log(3)
  // console.log(4)
  // async function foo() {
  //   console.log('foo')
  // }
  // async function bar() {
  //   console.log('bar start')
  //   await foo()
  //   console.log('bar end')
  // }
  // console.log('script start')
  // setTimeout(function () {
  //   console.log('setTimeout')
  // }, 0)
  // bar();
  // new Promise(function (resolve) {
  //   console.log('promise executor')
  //   resolve();
  // }).then(function () {
  //   console.log('promise then')
  // })
  // console.log('script end')
  // function sleep(ms, cb) {
  //   let time = Date.now()
  //   while(Date.now() - time < ms) {
  //
  //   }
  //   typeof cb === 'function' && cb()
  // }
  // function useTime(time, flag) {
  //   console.log(flag + '=>' + (Date.now() - time))
  // }
  // // 宏任务套微任务
  // let time = Date.now()
  // setTimeout(() => {
  //   useTime(time, 'time')
  // }, 0)
  // setTimeout(() => {
  //   new Promise(resolve => {
  //     sleep(1000, resolve)
  //   }).then(() => {
  //     useTime(time, 'one-1 timeout')
  //   })
  //   new Promise(resolve => {
  //     sleep(1000, resolve)
  //   }).then(() => {
  //     useTime(time, 'one-2 timeout')
  //   })
  // }, 1000)
  // setTimeout(() => {
  //   useTime(time, 'two timeout')
  // }, 1000)
  // setTimeout(() => {
  //   useTime(time, 'three timeout')
  // }, 1000)
</script>
</body>
</html>
